在本系列之前的博文中,我们介绍了The Blacksmith的创作团队,以及短片美感的制作流程。
因为打算用Unity 5来开发这个项目,所以现在我们不得不把更多的注意力转移到技术问题上,在这篇博文中,我们将关注场景建设、着色和照明。The Blacksmith的制作在Unity早期的alpha和 beta版本中进行,并在Unity 5.0.b22中最终稳定下来,然后发布。因此,整个项目也跟着升级到了发布时的Unity版本。使用一个研发中的引擎意味着无法避免会有许多不稳定因素,导致产品制作效率低下。我们每周都要面对两难的选择。到底是要升级新版本补丁?还是跳过一个版本来避免打断团队现有的工作流程此外,The Blacksmith中的动画和摄像机序列是基于Director系统的。它是Unity叙事工具的一部分,而Unity叙事工具这在当时仍处在发展的早期阶段(它的发布日期至今也没有公布)。我们在项目进行到差不多一半时,为了添加叙事工具功能,每次的Unity更新我们都得重新把系统集成到新版本。一直持续到我们最终发布为止。因为我们是Unity的内容制作团队,我们会提交bug或功能需求,事实上,我们提出的反馈会和广大Unity用户的需求放在一起被权衡,通常不会得到任何优先待遇。在The Blacksmith的制片伊始,我们便在Unity中利用白模搭建了一个场景。来自Asset Store的一些素材,比如Quantum Theory的Better Rocks and Cliffs, 非常有助于我们对原型的设计,同时,这也确保了我们能够尽早开始视觉相关的开发工作。我们很快做出了细节丰富的场景:根据我们的故事情节,我们在前期制作过程中需要做的是,利用一组相机进行迭代,缓缓地接近所要拍摄的景象。在此基础上,我们需要划分好每一个镜头都需要的哪些资源。与此同时,角色的3D美术设计也正式开工。尽可能地保留对每一个镜头中的艺术把控能力对我们而言非常重要。因此,我们基于Unity编辑器专门扩展了一个场景管理器,然后用它为每个镜头中的对象分组。我们用它来启用或禁用某些物品,或更改它们的属性——地点,规模,材料等等——来求得一个特定的镜头,以获得更好的构图。同样地,每一个镜头都可以拥有自己特定的光照设置,也多亏了实时全局光照系统,我们可以对镜头切换之间的光照做出即时改变。Unity基于物理的着色系使用和配置起来都相当容易上手。我们对它的运用可谓贯穿了整个项目。这个项目中,我们并不打算开发一个专门的皮肤着色器,于是我们就直接采用了Standard Shader标准着色器:Unity 5中标准着色器最大的优势之一就是:我们可以根据项目需求随心所欲地扩展和修改它,因为它就是为此而生的。http://unity3d.com/get-unity/download/archive(在对应平台的“下载”下拉菜单中选择“内置着色器”)。有了源码后,在此基础上开发具有项目针对性的着色器是非常容易的,我们在The Blacksmith中做了很多这样的工作。我们下面就来分享一些例子。我们修改了标准着色器,使之能够感知到我们已经在项目中添加的自定义着色器。我们对这种修改进行了两个不同版本的运用:一个用在环境上(例如:让它感知到我们的大气散射)另一个更复杂一些的用在角色上(用来感知我们独特的角色阴影和皱纹贴图)。后者的界面用滑块对镜面贴图选项做了小小的增强。为了让维京挑战者的面部更加生动、拥有更多的细节,我们决定开发一个感知形状融合的皱纹贴图解决方案。基于判断最为突出的形状融合,我们在一个屏幕空间的预渲染通道内混合运算了法线和遮蔽纹理。然后直接从这个屏幕空间将经过采样和解包的法线和遮蔽数据输入到一个标准的着色器变量中,从而取代了常规的材质。标准着色器非常适用于绝大多数现实世界中存在的材质,可惜的是不包含头发。虽然头发的渲染从来都不是The Blacksmith的着重点,我们依然希望能做出各向异性的头发高亮,并使它们能正确地整合其他材质所用的物理的环境。为了实现这一点,我们修改了一个标准着色器,使其在采用了一个不同的反射率分布模型的同时,保留了反射和光照探测的采样。我们希望镜头中有一些柔软的植物,同时探索出在场景中绘制不同植被的简单方法。这里的解决方案是对Unity内置的植被功能分两个阶段进行扩展。一个叫做PaintJob的小工具能生成一个临时地形自动打包场景中的静态几何物件。加上一個简单的打包规则控制,这使我们能够围绕地形和建筑在地面网格上绘制植被。渲染时,我们再将绘制好的数据放到一个自定义组件当中,这个组件专门用来处理视野依赖的排序、动态全局光照的采样,管理遮挡关系和多层次细节。我们采用分层的方式来分离照明人物和环境,并为每个光源分别配置了各自的剔除遮罩。这样一来,我们对人物和環境都有了更好的控制。這種方法常被運用在電影拍攝,會根据角色呈现的位置而设置特定的光照条件。为了改进角色的外观,我们使用了额外的局部光照来柔化他们面部的阴影部分(暗部)。因为角色形象的呈现可谓是全片的重中之重,在DEMO中,我们有大量的特写镜头,必须确保这些角色能够以很高的分辨率接受阴影。为此,我们增加了一个独立的阴影纹理,专门用来处理角色的阴影。在铁匠铺中的光照被设定为是从墙壁和屋顶的镂洞中透射进来的。这种效果是通过把一张恰当的图案当成光打在場景来实现的。对于海洋和海滩的浅洼,我们想要表現物体穿入水面的尖锐感表现,当其距离越深时所具有的散射效果就越强。我们最终打造出了类似于水面反射的功能,采用了一个的深度感知的計算方式,来計算出一個变量给Surface Smoothness。又一次地,這输出結果被放入到一个标准的着色器,然后再用我们定制的反射纹理来替换反射的Cubemap(方块贴图)。在The Blacksmith创作系列的下一篇博文中,我们将发布该作品的相关资源,包括Demo的可执行版本、资源包、工具集和着色器。请保持关注!
若想了解更多The Blacksmith的开发心得以及阅读相关技术文章,请点击阅读原文,加入Unity中文官方社区!